package com.eastedu.template.util;

import com.eastedu.report.common.util.DecimalUtil;

import java.util.function.Function;

/**
 * The interface Render data util.
 *
 * @author superman
 */
public interface RenderDataUtil {


    /**
     * 默认保留一位小数, 乘以1
     *
     * @param <T>      the type parameter
     * @param function the function
     * @return the function
     */
    static <T> Function<T, Number> doubleFormat(Function<T, Number> function) {
        return doubleFormat(function, 1, "#0.0");
    }

    /**
     * 默认乘以1,并指定格式
     *
     * @param <T>      the type parameter
     * @param function the function
     * @param format   the format
     * @return the function
     */
    static <T> Function<T, Number> doubleFormat(Function<T, Number> function, String format) {
        return doubleFormat(function, 1, format);
    }

    /**
     * 默认保留一位小数，指定倍数
     *
     * @param <T>      the type parameter
     * @param function the function
     * @param multiple the multiple
     * @return the function
     */
    static <T> Function<T, Number> doubleFormat(Function<T, Number> function, Integer multiple) {
        return doubleFormat(function, multiple, "#0.0");
    }

    /**
     * 指定倍数和格式
     *
     * @param <T>      the type parameter
     * @param function the function
     * @param multiple 倍数
     * @param format   格式化
     * @return the function
     */
    static <T> Function<T, Number> doubleFormat(Function<T, Number> function, Integer multiple, String format) {
        return function.andThen(number -> {
            if (number instanceof Double) {
                return DecimalUtil.doubleFormat((Double) number * multiple, format);
            }
            return number;
        });
    }
}
